package com.atbun.aclservice.controller;


import com.atbun.aclservice.entity.AclRole;
import com.atbun.aclservice.service.RoleService;
import com.atbun.commonutils.R;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  角色 前端控制器
 * </p>
 *
 * @author testjava
 * @since 2020-05-23
 */
@RestController
@RequestMapping("/admin/acl/role")
public class RoleController {

    @Autowired
    private RoleService roleService;

    /**
     * 获取角色分页列表且查询条件查询
     * @param page  当前页码
     * @param limit 每页记录数
     * @param aclRole 查询条件
     * @return
     */
    @GetMapping("queryAllRole/{page}/{limit}")
    public R queryAllRole(@PathVariable long page, @PathVariable long limit, AclRole aclRole){
        Page<AclRole> pageParam = new Page<>(page,limit);
        QueryWrapper<AclRole> queryWrapper = new QueryWrapper<>();
//        根据角色名称模糊查询
        queryWrapper.like(!StringUtils.isEmpty(aclRole.getRoleName()),"role_name",aclRole.getRoleName());
        this.roleService.page(pageParam, queryWrapper);
        return R.ok().data("items",pageParam.getRecords()).data("total",pageParam.getTotal());
    }

    /**
     * 根据角色id获取角色
     * @param roleId
     * @return
     */
    @GetMapping("getRole/{roleId}")
    public R getRole(@PathVariable String roleId){
        AclRole role = this.roleService.getById(roleId);
        return R.ok().data("item",role);
    }

    /**
     * 新增角色
     * @param role
     * @return
     */
    @PostMapping("saveRole")
    public R saveRole(@RequestBody AclRole role){
        boolean save = this.roleService.save(role);
        if (save){
            return R.ok().message("添加角色成功");
        }
        return R.error().message("添加角色失败");
    }

    /**
     * 修改角色
     * @param role
     * @return
     */
    @PutMapping("update")
    public R updateById(@RequestBody AclRole role) {
        boolean update = roleService.updateById(role);
        if (update){
            return R.ok().message("修改角色成功");
        }
        return R.error().message("修改角色失败");
    }

    /**
     * 删除角色
     * 注意：如果当前角色有用户正在使用，则不能删除，
     *      如果当前角色与菜单有关联，可以删除，但是注意，删除该角色时，角色与菜单关联表的当前角色数据也应该删除
     * @param roleId
     * @return
     */
    @DeleteMapping("removeRole/{roleId}")
    public R removeRole(@PathVariable String roleId){
        return this.roleService.removeRole(roleId);
    }

    /**
     * 根据角色id列表删除角色 暂时可以考虑不用，因为删除角色列表太多，一个一个删除会比较方便，不然有用户使用的时候就删除失败
     * @param idList
     * @return
     */
//    @DeleteMapping("batchRemove")
//    public R batchRemove(@RequestBody List<String> idList) {
//        roleService.removeByIds(idList);
//        return R.ok();
//    }

}

